package com.vay.de.dang.online.web;

import com.vay.de.dang.online.resp.RApplyBillDto;
import com.vay.de.dang.online.resp.REmergencyContactDto;
import com.vay.de.dang.online.resp.RFinancialProductDto;
import com.vay.de.dang.online.resp.RRepaymentMethodDto;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;

import com.vay.de.dang.online.entiy.AddressEntity;
import com.vay.de.dang.online.entiy.AppConfigEntity;
import com.vay.de.dang.online.entiy.CommodityEntity;
import com.vay.de.dang.online.entiy.SignInEntity;
import com.vay.de.dang.online.entiy.MenuItemEntity;
import com.vay.de.dang.online.entiy.PropertyRuleEntity;

public class JsonUtil {

    private static Gson mGson = new Gson();

    // 1:返回内容为空，
    // 0:成功，
    // -1:服务器错误，
    // -2: 访问被拒绝，
    // -3: 请求方法错误，
    // -4: 请求参数错误，
    // -5: 请求json格式错误，
    // -8: 无权限访问，
    // -9: 登录失败，
    // -10: 用户过期或处在无登录状态，
    // -11: 验证签名错误，
    // -12: 存在不合法数据
    //{"code":0,"msg":"success","data":false,"success":true}
    public static boolean isOk(String json) {
        try {
            JSONObject jo = new JSONObject(json);
            return jo.optInt("code") == 0;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    public static int readCode(String json) {
        try {
            return new JSONObject(json).optInt("code");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return -1;
    }

    public static String readData(String json) {
        try {
            JSONObject jo = new JSONObject(json);
            return jo.optString("data");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String readMsg(String json) {
        try {
            JSONObject jo = new JSONObject(json);
            return jo.optString("msg");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static final String objectToJson(Object obj) {
        return obj == null ? "" : mGson.toJson(obj);
    }

    public static final <T> T toObjectByData(String json, Class<T> cls) {
        return jsonToObject(JsonUtil.readData(json), cls);
    }

    public static final <T> T jsonToObject(String json, Class<T> cls) {
        if (json != null && cls != null) {
            try {
                return mGson.fromJson(json, cls);
            } catch (Exception var3) {
                var3.printStackTrace();
                return null;
            }
        } else {
            return null;
        }
    }

    public static final <T> T jsonToType(String json, TypeToken typeToken) {
        if (json != null && typeToken != null) {
            try {
                return mGson.fromJson(json, typeToken.getType());
            } catch (Exception var3) {
                var3.printStackTrace();
                return null;
            }
        } else {
            return null;
        }
    }

    public static SignInEntity toLoginEntity(String json) {
        return jsonToObject(json, SignInEntity.class);
    }

    public static List<String> toBroadcast(String json) {
        return jsonToType(readData(json), new TypeToken<ArrayList<String>>() {
        });
    }

    public static AppConfigEntity toAppConfig(String json) {
        return jsonToObject(readData(json), AppConfigEntity.class);
    }

    public static List<CommodityEntity> toLoanCommodityList(String json) {
        return jsonToType(readData(json), new TypeToken<ArrayList<CommodityEntity>>() {
        });
    }

    public static List<PropertyRuleEntity> toPropertyRuleList(String json) {
        return jsonToType(readData(json), new TypeToken<ArrayList<PropertyRuleEntity>>() {
        });
    }

    public static List<MenuItemEntity> toOptionItems(String json) {
        return jsonToType(readData(json), new TypeToken<ArrayList<MenuItemEntity>>() {
        });
    }

    public static List<AddressEntity> toCity(String json) {
        return jsonToType(readData(json), new TypeToken<ArrayList<AddressEntity>>() {
        });
    }

    public static List<RFinancialProductDto> toFinancials(String json) {
        return jsonToType(readData(json), new TypeToken<ArrayList<RFinancialProductDto>>() {
        });
    }

    public static List<REmergencyContactDto> toREmergencyContact(String json) {
        return jsonToType(readData(json), new TypeToken<ArrayList<REmergencyContactDto>>() {
        });
    }

    public static List<RApplyBillDto> toRApplyList(String json) {
        return jsonToType(readData(json), new TypeToken<ArrayList<RApplyBillDto>>() {
        });
    }

    public static List<MenuItemEntity> toRepaymentWay(String json) {
        return jsonToType(readData(json), new TypeToken<ArrayList<MenuItemEntity>>() {
        });
    }

    public static List<RRepaymentMethodDto> toAllRepaymentWay(String json) {
        return jsonToType(readData(json), new TypeToken<ArrayList<RRepaymentMethodDto>>() {
        });
    }
}
